package club.controller;

import club.pojo.AdoptAnimal;
import club.pojo.Pet;
import club.pojo.User;
import club.service.AdoptAnimalService;
import club.util.Message;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
import java.util.Date;
import org.springframework.web.bind.annotation.RequestParam;


@Controller
@RequestMapping("/adopt")
public class AdoptAnimalController {

    @Resource
    private AdoptAnimalService adoptAnimalService;

    /**
     * 分页查询领养申请列表
     * @param userName 申请人姓名（可选，用于模糊查询）
     * @param pageNum 页码
     * @param state 申请状态（1:待审核 2:已通过 0:已拒绝）
     * @return 包含分页信息的操作结果消息
     */
    @RequestMapping("/apply")
    @ResponseBody
    public Message agree(String userName, @RequestParam("pn") Integer pageNum, Integer state) {
        Integer pageSize = 5;
        if (pageNum == 0) {
            pageNum = 1;
        }
        // 调用服务层获取分页数据，根据用户名和状态筛选
        PageInfo<AdoptAnimal> pageInfo = adoptAnimalService.allAdoptAnimal(userName, pageNum, pageSize, state);
        return Message.success().add("pageInfo", pageInfo);
    }

    /**
     * 创建领养申请
     * @param session HTTP会话，从中获取当前用户和宠物信息
     * @return 操作结果消息
     */
    @RequestMapping("/create")
    @ResponseBody
    public Message create(HttpSession session) {
        User user = (User) session.getAttribute("user");
        // 从会话中获取当前用户
        Pet pet = (Pet) session.getAttribute("pet");
        // 从会话中获取当前宠物
        pet.setState(1);
        // 设置宠物状态为"已申请领养"

        // 创建领养申请对象
        AdoptAnimal adoptAnimal = new AdoptAnimal();
        adoptAnimal.setUserId(user.getId());
        // 设置申请人ID
        adoptAnimal.setPetId(pet.getId());
        // 设置申请的宠物ID
        adoptAnimal.setAdoptTime(new Date());
        // 设置申请时间为当前时间
        adoptAnimal.setState(1);
        // 设置申请状态为"待审核"

        adoptAnimalService.create(adoptAnimal);
        // 调用服务层创建领养申请
        return Message.success();
    }

    /**
     * 分页查询所有领养记录
     * @param adoptTime 申请时间（可选，用于筛选）
     * @param pageNum 页码
     * @return 包含分页信息的操作结果消息
     */
    @RequestMapping("/adopts")
    @ResponseBody
    public Message adopts(@RequestParam(required = false) String adoptTime,
                          @RequestParam(required = false, value = "pn") Integer pageNum) {
        int pageSize = 3;
        if (pageNum == null) {
            pageNum = 1;
        }
        // 调用服务层获取分页数据，根据申请时间筛选
        PageInfo<AdoptAnimal> pageInfo = adoptAnimalService.all(adoptTime, pageNum, pageSize);
        return Message.success().add("pageInfo", pageInfo);
    }

    /**
     * 拒绝领养申请
     * @param id 领养申请ID
     * @return 操作结果消息
     */
    @RequestMapping("/disAgree")
    @ResponseBody
    public Message disAgree(Integer id) {
        int update = adoptAnimalService.update(id, 0);
        // 调用服务层将申请状态更新为"已拒绝"
        if (update > 0) {
            return Message.success();
        }
        return Message.fail();
    }

    /**
     * 同意领养申请
     * @param id 领养申请ID
     * @return 操作结果消息
     */
    @RequestMapping("/agree")
    @ResponseBody
    public Message agree(Integer id) {
        System.out.println(id);
        // 打印申请ID（用于调试）
        int update = adoptAnimalService.update(id, 2);
        // 调用服务层将申请状态更新为"已通过"
        if (update > 0) {
            return Message.success();
        }
        return Message.fail();
    }
}